package com.yujiahao.bigdata.sql

import org.apache.spark.sql.{DataFrame, SparkSession}

object SparkSQL01_UDF {
  def main(args: Array[String]): Unit = {
    //TODO 1、SparkSQL直接构建无法构建，包是私有的，使用伴生对象伴生类构建builder
    //SparkSQL对SparkCore进行了封装，所以环境也要发生变化
    val spark = SparkSession.builder
      .master("local")
      .appName("Word Count")
      .getOrCreate()
    //构建Dataframe
    val df: DataFrame = spark.read.json("data/user.json")

    //使用SQL的方式访问DataFrame
    df.createOrReplaceTempView("user")
    spark.sql("select name from user")

    //TODO SQL文中想要调用自己定义的函数：UDF
    // 1、使用spark.udf.register("自定义函数名"，这个是函数的实现功能)。
    // 2、在SQL中使用自定义的函数
    // 案例：UDF自定义函数，给姓名前面加前缀
    spark.udf.register("prefixName",(name:String)=>{
      "Name:" + name
    })
    spark.sql("select prefixName(name) from user").show()

    //TODO 2、关闭资源
    spark.stop()
  }

}
